# -*- coding;utf-8 -*-
"""
File name : Html2Pdf.py.PY
Program IDE : PyCharm
Create file time: 2025/6/12 4:43
File Create By Author : 朱清闯
"""

import pypandoc
import pdfkit
import os
from django.conf import settings
from utils import FileOperate


def html_to_pdf_with_formulas(html_file_path, output_pdf_path):
    """
    将Linux系统中含LaTeX公式的HTML文件转换为PDF
    Args:
        html_file_path: 源HTML文件路径（如'/home/user/a.html'）
        output_pdf_path: 目标PDF文件路径
    """
    try:
        # 检查文件是否存在
        if not os.path.exists(html_file_path):
            raise FileNotFoundError(f"文件不存在: {html_file_path}")

        # 使用pypandoc处理HTML中的LaTeX公式
        mathjax_path = os.path.join(settings.BASE_DIR).replace('\\', '/') + '/mathjax/tex-chtml-full.js'
        intermediate_html = pypandoc.convert_file(
            html_file_path,
            'html',
            # format='latex',
            extra_args=['--mathjax', '--standalone', ],
            encoding='utf-8'
        )

        # 临时文件管理（保存中间HTML）
        temp_formula_html = os.path.join(settings.BASE_DIR).replace('\\', '/') + '/static/temp/html/temp.html'
        print('temp_formula_html:', temp_formula_html)
        with open(temp_formula_html, 'w', encoding='utf-8') as f:
            f.write(intermediate_html)

        # 配置pdfkit（Linux系统无需指定路径，直接使用默认wkhtmltopdf）
        wk_path = r'D:\Program Files\wkhtmltopdf\bin\wkhtmltopdf.exe'
        config = pdfkit.configuration() if os.name != 'nt' else pdfkit.configuration(wkhtmltopdf=wk_path)
        # config = pdfkit.configuration()

        # 如果这个文件存在，则先删除该文件
        print('output_pdf_path：', output_pdf_path)
        FileOperate.delete_file(output_pdf_path)
        # 转换为PDF
        pdfkit.from_file(
            # temp_formula_html,
            html_file_path,
            output_pdf_path,
            configuration=config,
            options={
                'enable-local-file-access': '',
                     'encoding': 'utf-8'}
        )

        # 清理临时文件
        # os.remove(temp_formula_html)
        return True

    except Exception as e:
        print(f"未知错误: {str(e)}")
    return False


if __name__ == "__main__":
    # 源HTML文件路径（Linux系统）
    source_html = "/home/a.html"
    # 目标PDF文件路径
    target_pdf = "/home/a_converted.pdf"

    # 执行转换
    success = html_to_pdf_with_formulas(source_html, target_pdf)

    if success:
        print(f"转换成功，PDF已保存至: {target_pdf}")
    else:
        print("转换失败，请查看错误信息")
